
#include "StateMachine.h"
#include "ProcessSystem.h"
#include "EstadoAIPerseguir.h"
#include "EstadoAIBuscarObjetivo.h"
#include "EstadoAIAtacar.h"
#include "MainGameState.h"
#include "States.h"

#include "Tangible.h"


void StateMachine::SetEstado( std::string const & estado )
{
	CrearEstado(estado);
}

void StateMachine::CrearEstado( std::string const & estado )
{
	if(mEstadoActual.get() != 0)
	{
		mEstadoActual->Finish();
		mEstadoActual.reset((EstadoAI*)0);
	}

	Process::Ptr ptrestado;


	//if(estado == "perseguir")
	//{
	//	EstadoAIPerseguir * perseguir = new EstadoAIPerseguir(this, mIDActor, 
	//		tan->GetObjetivo());
	//	ptrestado.reset(perseguir);
	//}
	if(estado == "buscar_objetivo")
	{
		EstadoAIBuscarObjetivo * buscar = new EstadoAIBuscarObjetivo(this,
			mIDActor, Ogre::Vector3(0, 0, 0), 20000);
		ptrestado.reset(buscar);
	}
	else if(estado == "atacar")
	{
		EstadoAIAtacar * atacar = new EstadoAIAtacar(this, mIDActor);
		ptrestado.reset(atacar);
	}

	if(ptrestado.get())
	{
		GetMainGameState()->GetControl().GetProcessMngr().Attach(ptrestado);
	}

	mEstadoActual = ptrestado;
	//mEstadoActual = boost::shared_polymorphic_cast<EstadoAI>(ptrestado);
}